package com.cqq.common.core.base;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.cqq.common.core.util.MessageUtil;
import com.cqq.common.core.util.SpringContextUtil;

/**
 * <h3>服务基类</h3>
 *
 * <p>
 * 所有服务的基类，定义了一些公共的方法。
 * </p>
 * 
 * @author xijq
 * @version 1.0.0
 * 
 */
public abstract class BaseService {

	private final Logger log = LoggerFactory.getLogger(this.getClass());
	
	private MessageUtil messageUtil = null;

	/**
	 * <h3>获取异常类中异常代码所对应的消息文本，并赋值给异常类返回</h3>
	 * 
	 * <p>
	 * 必须在 Spring 上下文中定义类型为 MessageUtil 的对象
	 * </p>
	 * 
	 * @param <T> BaseException子类
	 * @param e 异常类实例
	 * 
	 * @return BaseException
	 * 
	 * @see MessageUtil
	 */
	protected <T extends BaseException> T buildException(T e) {
		if(messageUtil==null){
			messageUtil=SpringContextUtil.getBean(MessageUtil.class);
		}
		String msg=this.messageUtil.getMessage(e.getErrorCode());
		log.error(msg);
		e.setErrorMsg(msg);
		if(e.getCaused()!=null){
			log.error(e.getMessage(),e.getCaused());
		}
		return e;
	}

}
